package 尚硅谷;

/**
 * @author zhangmin
 * @create 2022-03-23 16:54
 */
public class TransferValueDemo {
    public void changeValue1(int age) {
        age = 30;
    }

    public void changeValue2(Person person) {
        person.setPersonName("XXXX");
    }
    public void changeValue3(String str) {
        str = "XXX"; //string不可变，常量池找不到“XXX”会重新创建一个字面量“XXX”
    }

    public static void main(String[] args) {
        TransferValueDemo test = new TransferValueDemo();

        // 定义基本数据类型--在栈中
        int age = 20; //属于main方法
        test.changeValue1(age); //调用方法，传入的是值拷贝
        System.out.println("age ----" + age); //只是打印main方法中的age并不是拷贝到方法中的

        // 实例化person类
        Person person = new Person("abc");
        test.changeValue2(person); //对于引用类型，拷贝他的值就是拷贝了地址，所以方法会对地址的值进行改变
        System.out.println("personName-----" + person.getPersonName());

        // String
        String str = "abc";
        test.changeValue3(str);//拷贝了引用地址
        System.out.println("string-----" + str); //输出的是main中的引用指向的地址

    }
}
